Crate memory_addr
source ·Expand description
§memory_addr
Wrappers and helper functions for physical and virtual memory addresses.
§Examples
use memory_addr::{pa, va, va_range, PhysAddr, VirtAddr, MemoryAddr};
let phys_addr = PhysAddr::from(0x12345678);
let virt_addr = VirtAddr::from(0x87654321);
assert_eq!(phys_addr.align_down(0x1000usize), pa!(0x12345000));
assert_eq!(phys_addr.align_offset_4k(), 0x678);
assert_eq!(virt_addr.align_up_4k(), va!(0x87655000));
assert!(!virt_addr.is_aligned_4k());
assert!(va!(0xabcedf0).is_aligned(16usize));
let va_range = va_range!(0x87654000..0x87655000);
assert_eq!(va_range.start, va!(0x87654000));
assert_eq!(va_range.size(), 0x1000);
assert!(va_range.contains(virt_addr));
assert!(va_range.contains_range(va_range!(virt_addr..virt_addr + 0x100)));
assert!(!va_range.contains_range(va_range!(virt_addr..virt_addr + 0x1000)));
Macros§
- Converts the given range expression into
AddrRange
. Panics if the range is invalid. - Creates a new address type by wrapping an
usize
. - Creates implementations for the
Debug
,LowerHex
, andUpperHex
traits for the given address types defined by thedef_usize_addr
. - Alias for
PhysAddr::from_usize
. - Converts the given range expression into
PhysAddrRange
. Panics if the range is invalid. - Alias for
VirtAddr::from_usize
. - Converts the given range expression into
VirtAddrRange
. Panics if the range is invalid.
Structs§
- A range of a given memory address type
A
. - A page-by-page iterator.
- A physical memory address.
- A virtual memory address.
Constants§
- The size of a 4K page (4096 bytes).
Traits§
- A trait for memory address types.
Functions§
- Align address downwards.
- Align address downwards to 4096 (bytes).
- Returns the offset of the address within the alignment.
- Returns the offset of the address within a 4K-sized page.
- Align address upwards.
- Align address upwards to 4096 (bytes).
- Checks whether the address has the demanded alignment.
- Checks whether the address is 4K-aligned.